package com.tengju.bff.interfaces.covercharge.service.impl;

import com.tengju.bff.interfaces.covercharge.service.IServiceRabbitMqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;


/**
 * @author liang_shi
 * @date 2020/7/16 11:21
 * @description 服务费Mq发送
 */
@Slf4j
@Service
public class ServiceRabbitMqServiceImpl implements IServiceRabbitMqService {

//    @Autowired
//    private RabbitTemplate rabbitTemplate;
//
//    /**
//     * 消息异步化发送一个商户回调消息
//     *
//     * @param message 消息内容
//     * @param delay   延迟消费 (单位: 毫秒)
//     */
//    @Override
//    public void sendMessage(String exchange, String routeKey, RabbitMqMessage message, Integer delay) {
//        rabbitTemplate.setConfirmCallback(confirmCallback);
//        rabbitTemplate.setReturnCallback(returnCallback);
//        String sendMsg = JSON.toJSONString(message);
//        rabbitTemplate.convertAndSend(exchange, routeKey, sendMsg, msg -> {
//            msg.getMessageProperties().setMessageId(message.getMessageId());
//            if (!Objects.isNull(delay)) {
//                //华为云Mq
//                msg.getMessageProperties().setDelay(delay);
//                //阿里云Mq
//                msg.getMessageProperties().setHeader("delay", delay);
//            }
//            return msg;
//        });
//    }
//
//    /**
//     * 消息异步化发送一个商户回调消息
//     *
//     * @param message 消息内容
//     * @param delay   延迟消费 (单位: 毫秒)
//     */
//    @Override
//    public void sendMessage(String exchange, String routeKey, String messageId, Object message, Integer delay) {
//        rabbitTemplate.setConfirmCallback(confirmCallback);
//        rabbitTemplate.setReturnCallback(returnCallback);
////        String sendMsg = JSON.toJSONString(message);
//        rabbitTemplate.convertAndSend(exchange, routeKey, message, msg -> {
//            msg.getMessageProperties().setMessageId(messageId);
//            if (!Objects.isNull(delay)) {
//                //华为云Mq
//                msg.getMessageProperties().setDelay(delay);
//                //阿里云Mq
//                msg.getMessageProperties().setHeader("delay", delay);
//            }
//            return msg;
//        });
//    }
//
//    /**
//     * rabbitmq confirmCallback
//     */
//    private final RabbitTemplate.ConfirmCallback confirmCallback = (correlationData, ack, cause) -> {
//        log.info("correlationData: [{}],ack: [{}],cause:[{}]", correlationData, ack, cause);
//        if (!ack) {
//            log.info("异常处理....");
//        } else {
//            log.info("消息发送成功！");
//        }
//    };
//
//
//    /**
//     * rabbitmq returnCallback
//     */
//    private final RabbitTemplate.ReturnCallback returnCallback = (message, replyCode, replyText, exchange, routingKey) ->
//            log.info("cover-charge,returnedMessage: {} , routingKey: {} ", exchange, routingKey);
//
//
//    /**
//     * 重试消费
//     * 限制次数 5
//     *
//     * @param deliveryTag tag
//     * @param channel     mqChannel
//     * @param message     消费消息
//     */
//    @Override
//    public void retrySendMessage(int retryNum, Long deliveryTag, Channel channel, RabbitMqMessage message, Integer delay) {
//        try {
//            //释放上一笔消息，重新添加
//            channel.basicAck(deliveryTag, true);
//            //消费补充机制
//            int num = message.getNum() + 1;
//            log.info("流水号：{},重新添加消息，次数:{}", message.getMessageId(), num);
//            //消费次数大于等于retryNum即取消消费
//            if (num < retryNum) {
//                sendUpdateMessage(message, num, delay);
//            } else {
//                log.info("流水号：{},消费次数达到限制,取消消费", message.getMessageId());
//                channel.basicAck(deliveryTag, true);
//            }
//        } catch (IOException e) {
//            log.error("流水号：{},重试消费处理异常", message.getMessageId(), e);
//        }
//    }
//
//    /**
//     * 更新发送注册用户信息
//     *
//     * @param mqMessage 请求信息
//     */
//    private void sendUpdateMessage(RabbitMqMessage mqMessage, int num, Integer delay) {
//        mqMessage.setNum(num);
//        mqMessage.setUpdateTime(new Date());
//        //n分钟后消费
//        sendMessage(mqMessage.getTopic(), mqMessage.getRouteKey(), mqMessage, delay);
//    }


}
